package kmp;

import java.util.Arrays;

public class LongestCommonPrefix {
//    Leetcode: 编写一个函数来查找字符串数组中的最⻓公共前缀。
//    如果不存在公共前缀,返回空字符
//    串 ""。

    //  CKG TODO 2023/5/8: 第一步 检查数组是否合法
    //  CKG TODO 2023/5/8:  数组排序 升序排列
    //  CKG TODO 2023/5/8:查找第一个和最后一个的单词相同的前缀 就是整个数组的最长公共子串

    public boolean checkStr(String[] strs){
        boolean flag=true;
        if (strs.length==0||strs==null){
            flag=false;
            return flag;
        }
        int length = strs.length;
        for (int i = 0; i < length; i++) {
            if (strs[i].length()==0||strs[i]==null){
                flag=false;
                return flag;
            }
        }
        return  flag;
    }

    public  String   longgest(String[] strs){
        StringBuffer stringBuffer = new StringBuffer();
        if (checkStr(strs)) {
            Arrays.sort(strs);
            String first = strs[0];
            String end = strs[strs.length - 1];
            int min = Math.min(first.length(), end.length());
            for (int i = 0; i < min; i++) {
                if (first.charAt(i) == end.charAt(i)) {
                    stringBuffer.append(first.charAt(i));
                } else {
                    break;
                }
            }
        }
        return stringBuffer.toString();
    }


    public static String replaceSpace(String[] strs) {
// 如果检查值不合法及就返回空串
        if (!checkStrs(strs)) {
            return "";
        }
// 数组⻓度
        int len = strs.length;
// 用于保存结果
        StringBuilder res = new StringBuilder();
// 给字符串数组的元素按照升序排序(包含数字的话,数字会排在前面)
        Arrays.sort(strs);
        int m = strs[0].length();
        int n = strs[len - 1].length();
        int num = Math.min(m, n);
        for (int i = 0; i < num; i++) {
            if (strs[0].charAt(i) == strs[len - 1].charAt(i)) {
                res.append(strs[0].charAt(i));
            } else
            break;
        }
        return res.toString();
    }


    private static boolean checkStrs(String[] strs) {
        boolean flag = false;
        if (strs != null) {
// 遍历strs检查元素值
            for (int i = 0; i < strs.length; i++) {
                if (strs[i] != null && strs[i].length() != 0) {
                flag = true;
                }
                else {
                flag = false;
                break;
                }
            }
        }
        return flag;
    }

    public void  test(String[]  strs){
        Arrays.sort(strs);
        for (String a: strs
             ) {
            System.out.println(a);
        }
    }



    // 测试
    public static void main(String[] args) {
        String[] strs = { "customer", "car", "cat" };
// String[] strs = { "customer", "car", null };//空串
// String[] strs = {};//空串
// String[] strs = null;//空串
//        System.out.println(LongestCommonPrefix.replaceSpace(strs));// c
        LongestCommonPrefix longestCommonPrefix = new LongestCommonPrefix();
//        longestCommonPrefix.test(strs);

        System.out.println(longestCommonPrefix.longgest(strs));
    }


}


